package com.baoyouqun.base.utils;


import org.springframework.security.crypto.bcrypt.BCrypt;

/**
 * 密码加密与验证工具类
 * 使用BCrypt算法进行加盐哈希处理
 */
public class PasswordUtils {

    /**
     * 生成加密盐值
     *
     * @return 生成的盐值
     */
    public static String generateSalt() {
        // 工作因子设为12，数值越大加密强度越高，耗时也越长
        return BCrypt.gensalt(12);
    }

    /**
     * 对密码进行加盐加密
     *
     * @param password 原始密码(此处为手机号)
     * @param salt     盐值
     * @return 加密后的密码
     */
    public static String encryptPassword(String password, String salt) {
        if (password == null || salt == null) {
            throw new IllegalArgumentException("密码和盐值不能为空");
        }
        return BCrypt.hashpw(password, salt);
    }

    /**
     * 验证密码是否正确
     *
     * @param rawPassword       原始密码(用户输入的密码)
     * @param encryptedPassword 加密后的密码(存储在数据库中的密码)
     * @return 验证结果，true表示密码正确，false表示密码错误
     */
    public static boolean verifyPassword(String rawPassword, String encryptedPassword) {
        if (rawPassword == null || encryptedPassword == null) {
            return false;
        }
        try {
            return BCrypt.checkpw(rawPassword, encryptedPassword);
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 注册时使用手机号作为默认密码并加密的示例方法
     *
     * @param phoneNumber 手机号
     * @return 包含盐值和加密后密码的数组，index 0为盐值，index 1为加密后密码
     */
    public static String[] registerWithPhoneAsPassword(String phoneNumber) {
        String salt = generateSalt();
        String encryptedPassword = encryptPassword(phoneNumber, salt);
        return new String[]{salt, encryptedPassword};
    }
}
